home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / sun4c.md / old / globram.h < prev    next >
C/C++ Source or Header  |  1990-12-19  |  7KB  |  185 lines

  1.  
  2. /*    @(#)globram.h 1.10 88/02/08 SMI      */
  3.  
  4. /*
  5.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  6.  */
  7.  
  8. /*
  9.  * globram.h
  10.  *
  11.  * Sun ROM Monitor global data
  12.  *
  13.  * This defines a data structure that lives in low RAM and is
  14.  * used by the ROM monitor for its own purposes.
  15.  *
  16.  * Elements of the structure are accessed by referring to "gp->xxx".
  17.  * "gp" is defined as a small integer coerced to a struct pointer.
  18.  * The compiler and assembler generate short absolute addresses from this.
  19.  */
  20. #ifndef GLOBRAM
  21. #define    GLOBRAM
  22.  
  23. /* FIXME, this whole nested include stuff needs cleanup. */
  24. #include "types.h"
  25. #include "sunromvec.h"
  26. #include "sunmon.h"
  27. #include "buserr.h"
  28. #include "asyncbuf.h"
  29. #include "dpy.h"
  30. #include "cpu.map.h"
  31. #include "diag.h"
  32. #include "pixrect.h"
  33. #include "memvar.h"
  34.  
  35. /* Define "keybuf_t" for asynchronous bufferring between nmi routine
  36.    and keyboard handler. */
  37. DEFBUF (keybuf_t, unsigned char, KEYBUFSIZE);
  38.  
  39. struct globram {
  40.     struct buserr_stack_20_common g_bestack;/* Stacked data from 68020 */
  41.     struct buserr_stack_20_extension g_beext;/* More data from 68020 */
  42.     long            g_beregs[17];    /* Regs & usp from last b.e. */
  43.     struct buserrorreg    g_because;    /* What caused the bus error? */
  44.  
  45. /* Fake copies of hardware registers that can't be read or written from C */
  46.     unsigned char        g_leds;        /* LED register, set_leds */
  47.  
  48. /* Miscellaneous services */
  49.     unsigned         g_simm;        /* save bad SIMM module number*/
  50.     int            g_nmiclock;    /* pseudo-clock counter (msec, 
  51.                             bumped by nmi routine) */
  52.     unsigned        g_memorysize;    /* Phys size of mem in bytes */
  53.     unsigned        g_memoryavail;    /* Memory avail to Unix, not
  54.                            including Monitor pages */
  55.     unsigned char        *g_memorybitmap;/* 0 or Ptr to pageavail map */
  56.     unsigned        g_memoryworking;/* Memory that works, including
  57.                            Monitor pages */
  58.     char            *g_nextrawvirt;    /* Next for resalloc() */
  59.     char            *g_nextdmaaddr;    /* Next for resalloc() */
  60.     struct pgmapent        g_nextmainmap;    /* Next physmem to resalloc() */
  61.     long            *g_busbuf;    /* setbus() save area ptr */
  62.     struct diag_state    g_diag_state;    /* Info from powerup diags */
  63.     void            (*g_vector_cmd)(); /* Addr of vector cmd */
  64.  
  65. /* Command line input for monitor */
  66.     unsigned char        g_linebuf[BUFSIZE+2];    /* data input buffer */
  67.     unsigned char        *g_lineptr;    /* next "unseen" char */
  68.     int            g_linesize;    /* size of input line */
  69.     struct bootparam    g_bootparam;    /* Bootstrap parameter block */
  70.  
  71. /* keyboard handling */
  72.     struct zscc_device    *g_keybzscc;    /* UART address */
  73.     unsigned char        g_key;        /* Last up/down code read */
  74.     unsigned char        g_prevkey;    /* The previous reading */
  75.     unsigned char        g_keystate;    /* State machine */
  76.     unsigned char        g_keybid;    /* Id byte supplied */
  77.     struct keybuf_t        g_keybuf[1];    /* Raw up/down code buf */
  78.     unsigned int        g_shiftmask;    /* "shift-like" keys' posns */
  79.     unsigned int        g_translation;    /* Current translation */
  80.     int            g_keyrinit;    /* Rpt timeout (eg 500 ms) */
  81.     int            g_keyrtime;    /* Time of next repeat */
  82.     unsigned char        g_keyrtick;    /* 2nd rpt timeout (eg 30 ms) */
  83.     unsigned char        g_keyrkey;     /* keycode to rpt, or IDLEKEY */
  84.  
  85. /* Console I/O vectoring and such */
  86.     /* Values for g_insource and g_outsink are defined in sunromvec.h */
  87.     struct zscc_device    *g_inzscc;    /* Input UART address */
  88.     struct zscc_device    *g_outzscc;    /* Output UART address */
  89.     unsigned char        g_insource;    /* Current input source */
  90.     unsigned char        g_outsink;    /* Current output sink */
  91.     unsigned char        g_debounce;    /* used to debounce BREAK key */
  92.     unsigned char        g_init_bounce;    /* BREAK key initialization */
  93.     unsigned char        g_loop;        /* Continue on error flag */
  94.     unsigned char        g_echo;        /* input should be echoed? */
  95.     unsigned char        g_fbthere;    /* frame buffer plugged in? */
  96.  
  97. /* Watchdog resets */
  98.     long            g_resetaddr;    /* watchdog jump address */
  99.     long            g_resetaddrcomp;    /* ~g_resetaddr */
  100.     long            g_resetmap;    /* Map entry for g_resetaddr */
  101.     /* g_resetmap is really (struct pgmapent) but you can't do ~ on them. */
  102.     long            g_resetmapcomp;    /* ~g_resetmap */
  103.  
  104. /* Trace and breakpoint */
  105.     short            g_breakval;    /* instruc rplcd by bkpt */
  106.     short            *g_breakaddr;    /* address of current bkpt */
  107.     int            g_breaking;    /* we are resuming at bkpt? */
  108.     int            (*g_tracevec)();/* User's Trace vector */
  109.     unsigned char        *g_tracecmds;    /* string of commands */
  110.     int            (*g_breakvec)();/* User's Trap #1 vector */
  111.     int            (*g_breaktrvec)();/* User's Trace vector */
  112. /* Booting infor */
  113.     short            g_def_seq;    /* using default sequence */
  114.  
  115. /* Terminal emulator */
  116.     struct pixrect        g_fbpr;        /* pixrect for frame buffer */
  117.     struct mpr_data        g_fbdata;    /* mem_raster    ''    */
  118.     struct pr_prpos        g_fbpos;    /* Cur posn in frame buffer */
  119.     struct pixrect        g_charpr;    /* pixrect for char to paint */
  120.     struct mpr_data        g_chardata;    /* mem_raster     ''    */
  121.     struct pr_prpos        g_charpos;    /* Posit info    ''    */
  122.     unsigned short        (*g_font)[CHRSHORTS-1];    /* Font table address */
  123.     int            g_ax;        /* Alpha cursor x posn, chars */
  124.     int            g_ay;        /* Alpha cursor y posn, chars */
  125.     unsigned short        *g_dcax;
  126.     unsigned short        *g_dcay;     /* '' in device coordinates */
  127.     short            g_dcok;        /* device coords current? */
  128.     int            g_escape;    /* next char an escape cmd? */
  129.     int            g_chrfunc;    /* POX func to draw chars */
  130.     int            g_fillfunc;    /* POX func to clear areas */
  131.     int            g_state;    /* ALPHA, SKIPPING, etc */
  132.     int            g_cursor;    /* NOCURSOR or BLOCKCURSOR */
  133.     int            g_ac;        /* last arg in ESCBRKT seq's */
  134.     int            g_ac0;        /* ditto, next-to-last arg */
  135.     int            g_acinit;    /* g_ac with 0 left alone */
  136.     int            g_scrlins;    /* # lines to scroll */
  137.     int            g_gfxmemsize;    /* g_memorysize after shadow */
  138.     int            g_gfxmemsizecomp;    /* ~g_gfxmemsize */
  139.     unsigned         g_scrwidth;    /* Total width in pixels */
  140.     unsigned        g_scrheight;    /* Total height in pixels */
  141.     unsigned        g_wintop;    /* Top   margin of screen */
  142.     unsigned        g_winleft;    /* Left  margin of screen */
  143.     int            g_fbtype;    /* Type, see <sun/fbio.h> */
  144.     int            g_fbused;    /* mono or color */
  145.     int            g_scrsize;    /* screen size code */
  146.     short            g_BWenable;    /* B/W enable plane flag */
  147.     short            g_colorFB;    /* Color frame buffer flag */
  148.     short            g_colorDAC;    /* DAC color map flag */
  149.     char                    g_option;       /* Diagnostic option flag */
  150.         char                    g_Video;        /* Diagnostic video flag */
  151.         int                    Error;          /* Error ,Errors and Feedback*/
  152.         int                    Errors;         /* are used */
  153.         int                    Feedback;       /* in memory tests */
  154.         char                    g_diagecho;     /* Diagnostic echo flag */
  155.         char                    g_sccflag;      /* SCC Port A or Port B flag */
  156.     char            g_echoinput;    /* Input is Kybd or SCC */
  157.     long            g_mod3addr;    /* Error address */
  158.     long            g_mod3exp;    /* Expected Value */
  159.     long            g_mod3obs;    /* Observed Value */
  160.     int             adr_c;        /* Address inc for monitor */
  161.     int                   Modified;    /*Loc Modified flag in montor */
  162.     struct keyboard      *Curr_ktb;    /* Current keytable pointer */
  163.  
  164. /* window specifier */
  165.     unsigned int            g_bottom;          /* number of rows */
  166.     unsigned int            g_top;           /* number of columns  */
  167.     unsigned int            g_left;
  168.     unsigned int            g_right;
  169.     unsigned int            g_winbot;          /* bottom of window */
  170. };
  171.  
  172.  
  173. #define modified gp->Modified 
  174. #define adr_count gp->adr_c 
  175. #define curr_ktb gp->Curr_ktb
  176. #define video gp->g_Video
  177. #define g_error gp->Error
  178. #define g_errors gp->Errors
  179. #define feedbk gp->Feedback
  180.  
  181. #define                gp    ((struct globram *)STRTDATA)
  182.  
  183.  
  184. #endif
  185.